<?php

/**
 * 将bitmap转换成文字形式
 *
 * @param integer $flag
 * @return void
 */
function bitmapToStr(int $flag)
{
    $table = [];
    $start = 0;
    $index = 1;
    while (true) {
        if ($flag & 1) {
            if (!$start) {
                $start = $index;
            }
        } else {
            if ($start) {
                if ($start == $index - 1) {
                    $table[] = '' . $start;
                } else {
                    $table[] = $start . '-' . ($index - 1);
                }
                $start = 0;
            }
            if (!$flag) {
                break;
            }
        }
        $flag >>= 1;
        $index++;
    }
    return implode(',', $table);
}

/**
 * 获取最低位的位置
 *
 * @param [type] $flag
 * @return void 返回值从0开始
 */
function findLowBit($flag)
{
    return log($flag & -$flag, 2);
}

/**
 * 计算一个bitmap标记中有多少个1
 *
 * @param integer $flag
 * @return void
 */
function bitmapCountBit(int $flag)
{
    $count = 0;
    while ($flag) {
        $flag &= $flag - 1;
        $count++;
    }
    return $count;
}

/**
 * 给convertTimePeriod使用的函数,不用管
 *
 * @param [type] $old
 * @param [type] $min
 * @param [type] $max
 * @return void
 */
function updatePeriodString($old, $min, $max)
{
    if ($old == '') {
        if ($min == $max) {
            $old = '' . $min;
        } else {
            $old = $min . '-' . $max;
        }
    } else {
        if ($min == $max) {
            $old = $old . ',' . $min;
        } else {
            $old = $old . ',' . $min . '-' . $max;
        }
    }
    return $old;
}

/**
 * 将classTime位标记转换为三段表示的字符串
 *
 * @param [type] $flag
 * @return void
 */
function convertTimePeriod($flag)
{
    $table = array("", "", "");
    if ($flag <= 0) {
        return $table;
    }
    $min = 0;
    for ($i = 1; $i <= 6; $i++) {
        if ($flag & 1 == 1) {
            if ($min == 0) {
                $min = $i;
            }
        } else {
            if ($min != 0) {
                $table[0] = updatePeriodString($table[0], $min, $i - 1);
                $min = 0;
            }
        }
        $flag >>= 1;
    }
    if ($min != 0) {
        $table[0] = updatePeriodString($table[0], $min, 6);
        $min = 0;
    }
    for ($i = 7; $i <= 10; $i++) {
        if ($flag & 1 == 1) {
            if ($min == 0) {
                $min = $i;
            }
        } else {
            if ($min != 0) {
                $table[1] = updatePeriodString($table[1], $min, $i - 1);
                $min = 0;
            }
        }
        $flag >>= 1;
    }
    if ($min != 0) {
        $table[1] = updatePeriodString($table[1], $min, 10);
        $min = 0;
    }
    for ($i = 11; $i <= 14; $i++) {
        if ($flag & 1 == 1) {
            if ($min == 0) {
                $min = $i;
            }
        } else {
            if ($min != 0) {
                $table[2] = updatePeriodString($table[2], $min, $i - 1);
                $min = 0;
            }
        }
        $flag >>= 1;
    }
    if ($min != 0) {
        $table[2] = updatePeriodString($table[2], $min, 14);
        $min = 0;
    }
    return $table;
}


/**
 * 生成一个len字符长度的随机字符串
 */
function getRandomStr(int $len)
{
    $str = "";
    $str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
    $max = strlen($str_pol) - 1;
    for ($i = 0; $i <  $len; $i++) {
        $str .= $str_pol[mt_rand(0, $max)];
    }
    return $str;
}


//encrypt_openssl新版加密
function encrypt_openssl($str,$localIV,$encryptKey)
{
    return openssl_encrypt($str, 'AES-128-CBC',$encryptKey,0,$localIV);
}

//decrypt_openssl新版解密
function decrypt_openssl($str,$localIV,$encryptKey)
{
    return openssl_decrypt($str, 'AES-128-CBC', $encryptKey, 0, $localIV);
}
